#include <stdio.h>

float myfunc(float a, double b)
{
	return a + b;
}

void main()
{
	printf("%f\n", myfunc(6.66, 7.77));
}

#if 0

/*
 * intel
 */
0000000000001149 <myfunc>:
    1149:	f3 0f 1e fa          	endbr64 
    114d:	55                   	push   %rbp
    114e:	48 89 e5             	mov    %rsp,%rbp
    1151:	f3 0f 11 45 fc       	movss  %xmm0,-0x4(%rbp)		// rbp-0x4=xmm0
    1156:	f2 0f 11 4d f0       	movsd  %xmm1,-0x10(%rbp)	// rbp-0x10=xmm1
    115b:	f3 0f 5a 45 fc       	cvtss2sd -0x4(%rbp),%xmm0	// xmm0=rbp-0x4
    1160:	f2 0f 58 45 f0       	addsd  -0x10(%rbp),%xmm0	// xmm0=(rbp-0x4)+(rbp-0x10)
    1165:	f2 0f 5a c0          	cvtsd2ss %xmm0,%xmm0		// xmm0=xmm0
    1169:	5d                   	pop    %rbp
    116a:	c3                   	retq   

000000000000116b <main>:
    116b:	f3 0f 1e fa          	endbr64 
    116f:	55                   	push   %rbp
    1170:	48 89 e5             	mov    %rsp,%rbp
    1173:	f2 0f 10 05 95 0e 00 	movsd  0xe95(%rip),%xmm0        # 2010 <_IO_stdin_used+0x10> // 7.77
    117a:	00 
    117b:	66 0f 28 c8          	movapd %xmm0,%xmm1		// xmm1=xmm0=7.77
    117f:	f3 0f 10 05 91 0e 00 	movss  0xe91(%rip),%xmm0        # 2018 <_IO_stdin_used+0x18> // xmm0=6.66
    1186:	00 
    1187:	e8 bd ff ff ff       	callq  1149 <myfunc>		// my_func(xmm0, xmm1)
    118c:	f3 0f 5a c0          	cvtss2sd %xmm0,%xmm0		// xmm0=xmm0
    1190:	48 8d 3d 71 0e 00 00 	lea    0xe71(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    1197:	b8 01 00 00 00       	mov    $0x1,%eax
    119c:	e8 af fe ff ff       	callq  1050 <printf@plt>
    11a1:	90                   	nop
    11a2:	5d                   	pop    %rbp
    11a3:	c3                   	retq   
    11a4:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
    11ab:	00 00 00 
    11ae:	66 90                	xchg   %ax,%ax

/*
 * arm
 */
000000000040055c <myfunc>:
  40055c:	d10043ff 	sub	sp, sp, #0x10
  400560:	bd000fe0 	str	s0, [sp, #12]	// sp+12=s0
  400564:	fd0003e1 	str	d1, [sp]	// sp=d1
  400568:	bd400fe0 	ldr	s0, [sp, #12]	// s0=sp+12
  40056c:	1e22c001 	fcvt	d1, s0		// d1=s0
  400570:	fd4003e0 	ldr	d0, [sp]	// d0=sp
  400574:	1e602820 	fadd	d0, d1, d0	// d0=d1+d0
  400578:	1e624000 	fcvt	s0, d0		// s0=d0
  40057c:	910043ff 	add	sp, sp, #0x10	// sp=sp+0x10
  400580:	d65f03c0 	ret

0000000000400584 <main>:
  400584:	a9bf7bfd 	stp	x29, x30, [sp, #-16]!
  400588:	910003fd 	mov	x29, sp
  40058c:	90000000 	adrp	x0, 400000 <_init-0x3e8>
  400590:	911a0000 	add	x0, x0, #0x680			// x0=400680
  400594:	fd400000 	ldr	d0, [x0]			// d0=[x0]
  400598:	1e604001 	fmov	d1, d0				// d1=d0
  40059c:	5283d700 	mov	w0, #0x1eb8                	// #7864 w0=0x1eb8
  4005a0:	72a81aa0 	movk	w0, #0x40d5, lsl #16		// w0=0x40d5<<16
  4005a4:	1e270000 	fmov	s0, w0				// s0=w0
  4005a8:	97ffffed 	bl	40055c <myfunc>			// myfunc(s0, d1)
  4005ac:	1e22c000 	fcvt	d0, s0				// d0=s0
  4005b0:	90000000 	adrp	x0, 400000 <_init-0x3e8>
  4005b4:	9119e000 	add	x0, x0, #0x678
  4005b8:	97ffffa6 	bl	400450 <printf@plt>
  4005bc:	d503201f 	nop
  4005c0:	a8c17bfd 	ldp	x29, x30, [sp], #16
  4005c4:	d65f03c0 	ret

#endif
